package customizeservicelogic

import (
	"context"
	"fmt"

	"property_service/internal/svc"
	"property_service/property_service"

	"github.com/zeromicro/go-zero/core/logx"
)

type UpzLogic struct {
	ctx    context.Context
	svcCtx *svc.ServiceContext
	logx.Logger
}

func NewUpzLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpzLogic {
	return &UpzLogic{
		ctx:    ctx,
		svcCtx: svcCtx,
		Logger: logx.WithContext(ctx),
	}
}

// Upz 是一个用于更新数据库记录的方法
// 自定义修改值  解决:不能修改为0的情况
// 参数:
//   - in: 包含更新条件和数据的结构体指针
//     TableName: 表名
//     JudgmentField: 判断字段
//     JudgmentValue: 判断值
//     AssignmentField: 赋值字段
//     Assignment: 赋值
//     TenantID: 租户ID
//
// 返回值:
//   - *property_service.Response: 包含执行结果的结构体指针
//   - error: 错误信息
func (l *UpzLogic) Upz(in *property_service.JudgmentConditions) (*property_service.Response, error) {
	fmt.Println("in", in) // 打印输入参数，用于调试
	// 判断值是否为空
	if in.TableName == "" { // 检查表名是否为空
		return &property_service.Response{
			Code:    404,          // 设置错误码为404
			Data:    nil,          // 数据为空
			Message: "表名为空,请添加表名", // 返回错误信息
		}, nil
	}
	//获取 Gorm 数据库连接
	DB := l.svcCtx.Gorm
	//将表名,赋值字段，判断字段添加进去，构建动态SQL语句
	// SQL语句格式: UPDATE 表名 SET 赋值字段 = ? WHERE 判断字段 = ? AND tenant_id = ?
	sql := fmt.Sprintf("UPDATE %s SET %s = ? WHERE %s = ? AND  tenant_id = ?", in.TableName, in.AssignmentField, in.JudgmentField)
	var ss string // 声明一个字符串变量用于存储查询结果
	// 执行SQL语句，传入参数：赋值、判断值、租户ID
	DB.Raw(sql, in.Assignment, in.JudgmentValue, in.TenantID).Scan(&ss)

	// 返回成功响应
	return &property_service.Response{
		Code:    200,                         // 设置成功状态码为200
		Data:    nil,                         // 数据为空
		Message: fmt.Sprintf("执行成功: %s", ss), // 返回执行成功的消息
	}, nil
}
